<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 面向对象 
    // 思想上的提升 -> 将需求抽象为对象 -> 建立对象的目的 -> 描述需求的特征和行为


    // 面向过程
    // 字面量对象
    // 封装函数
    // 自定义构造函数 -> 封装

    // function calc(a, opt, b) {

    // }

    function Fn(a, b) {
        // {}
        // {}[[Prototype]] = Fn.prototype;
        // this -> {}

        this.a = a;
        this.b = b;

        // return this;
    }

    // 存实例化对象公共的属性和方法 
    // Fn.prototype = {constructor:Fn}
    Fn.prototype.add = function () {
        // this -> 调用此方法的实例化对象
        return this.a * 1 + this.b * 1;
    };

    Fn.prototype.reduce = function () {
        // this -> 调用此方法的实例化对象
        return this.a - this.b;
    };

    Fn.prototype.multiple = function () {
        // this -> 调用此方法的实例化对象
        return this.a * this.b;
    };

    Fn.prototype.devide = function () {
        // this -> 调用此方法的实例化对象
        return this.a / this.b;
    };

    Fn.prototype.mod = function () {
        // this -> 调用此方法的实例化对象
        return this.a % this.b;
    };

    Fn.prototype.pow = function () {
        // this -> 调用此方法的实例化对象
        return this.a ** this.b;
    };


    var n1 = new Fn(1, 2);
    console.log(n1);
</script>

</html>